package de.ssmp.wbs.daten;

import java.util.HashMap;
import java.util.Map.Entry;

import de.ssmp.wbs.Utilities;

/**
 * 
 * Torschuss stellt einen einzelnen Datensatz eines Stürmer da. Sample ist immer
 * ein Positiv-Beispiel, so dass nur eine Spezialisierung notwendig ist.
 * 
 * @author stiewen
 * @author maximilian
 * @version 1
 * 
 */
public class Torschuss implements Comparable<Torschuss>{

	/* Attribute */
	private HashMap<String, String> attribute;

	/* Constructor */
	public Torschuss() {
	}

	public Torschuss(HashMap<String, String> attribute) {
		this.attribute = attribute;
	}

	/* Getter&Setter */
	/**
	 * Gibt eine Liste mit Torschuss-Attributen zurück.
	 * 
	 * @return Eine HashMap<String, String> von Attributen des Torschusses.
	 */
	public HashMap<String, String> getAttributes() {
		if (attribute == null)
			attribute = new HashMap<String, String>();

		return attribute;
	}

	/* Overriden methods */
	@Override
	public String toString() {
		StringBuffer buf = new StringBuffer();
		buf.append("[");
		for (Entry<String, String> attribut : attribute.entrySet()) {
			buf.append(attribut.getKey());
			buf.append(":");
			buf.append(attribut.getValue());
			buf.append(",");
		}
		buf.append("]");

		return buf.toString();
	}

	/**
	 * 0 - Komplett gleich - alle Attribute gleich * == *, a == a, ... <\br>
	 * 0 - Wenn 'this' allgemeiner ist als Parameter newElement <\br>
	 * 1 - Wenn Parameter newElement allgemeiner ist als 'this' <\br>
	 * -1 - Wenn sie ungleich sind (vom Literal her)
	 * 
	 * -1 nehmen wir nicht auf
	 * 
	 * TODO
	 * Was passiert bei "1" - in Menge aufnehmen oder nicht?
	 * 
	 * 
	 * @param newElement Torschuss zum Vergleichen
	 */
	@Override
	public int compareTo(Torschuss newElement) {
		int returnCode = -1;
		for(String key : Utilities.keys){
			String valueOfO = newElement.getAttributes().get(key);
			String value = this.getAttributes().get(key);
			
			if(!valueOfO.equalsIgnoreCase(value)){
				return -1;
			}else if(valueOfO == Utilities.STAR){
				if(value == Utilities.STAR){
					returnCode = 0;
				}else{
					
				}
			}else{
				if(value.equalsIgnoreCase(valueOfO)){
					returnCode = 0;
				}else{
					return -1;
				}
			}
		}
		if(==){
			return 0;
		}else if(newElement allgemeiner){
			return 1;
		}else{
			return -1;
		}
		return returnCode;
	}
}